iT邦幫忙

DAY 9
2

Chrome Extension 開發筆記系列 第 9

Chrome Extension 筆記(09)繞過限制, 執行任意 javascript

  • 分享至 

  • xImage
  •  

之前在第三篇的安全策略中提到 Chrome Extension 禁止了 eval 的使用,
這篇就來提一下如何利用 HTML5 的新特性來繞過它吧!

manifest.json

{
   "manifest_version": 2,
   "name": "ironman6",
   "version": "1.0",
   "browser_action": {
      "default_popup": "index.html"
   }
}

index.html

        <title>ironman6</title>
        <style>
        	body {width: 500px;}
    		#content {width: 100%; height: 300px;}
    		#output {border-style: outset;}
    	</style>
    
    
        <textarea id="content">var test = [];
for(var i = 0; i < 10; i++){
    test.push( i + '<br/>');
}
document.querySelector('#output').innerHTML = test.join('');</textarea>
        <button id="runJSg">Run(Global)</button>
        <button id="runJSc">Run(Closure)</button>
        <div id="output">output</div>
        <script src="app.js"></script>
    

app.js

document.addEventListener('DOMContentLoaded', function () {
	document.querySelector('#runJSg').addEventListener('click', global);
	document.querySelector('#runJSc').addEventListener('click', closure);
});

var content = document.querySelector('#content');

function global() {
	runJS(content.value);
}

function closure() {
	runJS("(function(){" + content.value + "}())");
}

function runJS(content) {
	var blob = new Blob([content], {type: 'text/javascript'});
	var jsSrc = window.URL.createObjectURL(blob);
	var js = document.createElement('script');
	js.setAttribute('src', jsSrc);
	document.body.appendChild(js);
	window.URL.revokeObjectURL(jsSrc);
	js.parentElement.removeChild(js);
}

這個技巧是使用 Blob Url 的方式,
將程式碼轉成 Blob 後, 藉由 createObjectURL 產生對應的 Url,
而產生的 url 開頭是 blob: , 因此也不用擔心受到 内容安全策略(CSP) 的限制,
所以就能順利的把 JS 放到 body 裡讓他執行啦~


上一篇
Chrome Extension 筆記(08)獨立於 chrome 的應用視窗
下一篇
Chrome Extension 筆記(10)Chrome 的定時器 Alarms
系列文
Chrome Extension 開發筆記27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言